#ifndef LOG_HEADER
#define LOG_HEADER
#include<string>
#include<fstream>
#include<sstream>
#include<iostream>
#include<algorithm>
#include<iterator>
#include<vector>
#include<map>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include "def.hpp"
#include "utils.hpp"

/* This class is a Singleton */
class PuzaLogger{
public:
  static PuzaLogger* Instance();
  void Start();
  void End();
  string GetCurrentTime();
  void PutString(string);
private:
  PuzaLogger();  // private so that it can  not be called
  PuzaLogger(PuzaLogger const&){}; // copy constructor is private
  static PuzaLogger* m_pInstance;
  string log_file_name;
};

#endif
